<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    //  1. 可选操作符号； ?.  类似于 链接运算符.
    // 可以取位于连接对象链深处的属性值，而无需检查链中的每个引用是否有效。
    let obj = {
      name: "张三",
      obj1: {
        myname: "lisi",
        age: 18
      },
      obj2: {

      }
    }
    console.log(obj.age); // und
    console.log(obj.obj1.age); // 18
    console.log(obj?.obj2?.age); // und
  
    // a?.b  // 等同于  a == null ? undefined : a.b


    // 2.空合并运算符 ??

    function fn (a, b) {
      // var a = a || 1;
      // var b = b || 2;
      var a = a ?? 1;
      var b = b ?? 2;
      console.log(a, b);
    }
    fn("",0);
    fn(3,4);
    fn(undefined,null);




  </script>
</body>

</html>